bleh
[mqlkit.git] / Lets Go.mq4
blobcce9c406c23b4969e4213a0b4130d94b5c344f19
1 //+------------------------------------------------------------------+\r
2 //|                              Lets Go Where Price Goes EA, v1.0.0 |\r
3 //|                              Copyright © 2011 |\r
4 //|                                                |\r
5 //+------------------------------------------------------------------+\r
6 // modified by WL Tam\r
7 #property copyright "Copyright © 2011, trapule@gmail.com"\r
8 #property link      "trapule@gmail.com"\r
9 \r
10 extern string info1        = "Magic number";\r
11 extern int magicnumber     = 20110110;\r
12 extern string info2        = "Pip distance between levels";\r
13 extern int pipstep         = 20;\r
14 extern string info3        = "Fixed lot for each order";\r
15 extern double fixedlot     = 0.1;\r
16 extern int maxpip          = 80;\r
21 double pip,refup, refdown;\r
22 int i;\r
24 //+------------------------------------------------------------------+\r
25 //| expert initialization function                                   |\r
26 //+------------------------------------------------------------------+\r
27 int init()\r
28 {\r
29   if (Digits==2 || Digits==3) pip=0.01;\r
30   else if (Digits==4 || Digits==5) pip=0.0001;\r
31   return(0);\r
32 }\r
34 //+------------------------------------------------------------------+\r
35 //| expert deinitialization function                                 |\r
36 //+------------------------------------------------------------------+\r
37 int deinit()\r
38 {\r
39    return(0);\r
40 }\r
44 //+------------------------------------------------------------------+\r
45 //| expert start function                                            |\r
46 //+------------------------------------------------------------------+\r
47 int start()\r
48 {\r
49 // no pending order or no active order\r
50    if ( count(OP_BUY) + count(OP_SELL) + count(OP_BUYSTOP) + count(OP_SELLSTOP) == 0)\r
51    {\r
53       if (iMA(Symbol(),PERIOD_M5,21,0,MODE_EMA,PRICE_CLOSE,0) < (Ask/2 + Bid /2))\r
54       {\r
55          refup = Ask + 0.5*pipstep*pip;\r
56          refdown = refup - pipstep*pip;\r
57          Print(iMA(Symbol(),PERIOD_M5,21,0,MODE_EMA,PRICE_CLOSE,0),"  BUY ", (Ask/2 + Bid /2));\r
58          Print("refup =",refup,"    || refdown =",refdown);\r
59          OrderSend (Symbol(), OP_BUYSTOP, fixedlot,refup , 100, refdown, 0.0, "Lets Go Where Price Goes", magicnumber,0,Blue);\r
60       }\r
61       if (iMA(Symbol(),PERIOD_M5,21,0,MODE_EMA,PRICE_CLOSE,0) > (Ask/2 + Bid /2))\r
62       {\r
63          refdown = Bid - 0.5*pipstep*pip;\r
64          refup = refdown + pipstep*pip;      \r
65          Print(iMA(Symbol(),PERIOD_M5,21,0,MODE_EMA,PRICE_CLOSE,0),"  SELL ", (Ask/2 + Bid /2));\r
66          Print("refup =",refup,"    || refdown =",refdown);\r
67          OrderSend (Symbol(), OP_SELLSTOP, fixedlot, refdown, 100, refup, 0.0, "Lets Go Where Price Goes", magicnumber,0,Red);\r
68       }\r
69    }\r
70 // no active order but trend changed\r
71    if ( count(OP_BUY) + count(OP_SELL) == 0)\r
72    {\r
73       if( count(OP_BUYSTOP)== 1 && iMA(Symbol(),PERIOD_M5,21,0,MODE_EMA,PRICE_CLOSE,0) > (Ask/2 + Bid /2))\r
74       {\r
75          Print("trend from buy to sell");\r
76          OrderSelect(0, SELECT_BY_POS);\r
77          OrderDelete(OrderTicket());        \r
78       }\r
79       if( count(OP_SELLSTOP)== 1 && iMA(Symbol(),PERIOD_M5,21,0,MODE_EMA,PRICE_CLOSE,0) < (Ask/2 + Bid /2))\r
80       {\r
81          Print("trend from sell to buy");\r
82          OrderSelect(0, SELECT_BY_POS);\r
83          OrderDelete(OrderTicket());        \r
84       }      \r
85    }\r
87 // no pending order  \r
88    if( (count(OP_BUYSTOP) + count(OP_SELLSTOP)) == 0 && (count(OP_BUY)+count(OP_SELL))>0)\r
89    \r
90    {\r
91       if(count(OP_BUY)>0)\r
92       {\r
93          refup    = refup + pipstep*pip;\r
94          refdown  = refup - pipstep*pip;\r
95          OrderSend (Symbol(), OP_BUYSTOP, fixedlot,refup , 100, refdown, 0.0, "Lets Go Where Price Goes", magicnumber,0,Blue);\r
96       }   \r
97       if(count(OP_SELL)>0)\r
98       {\r
99          refup = refup - pipstep*pip;\r
100          refdown = refup - pipstep*pip; \r
101          OrderSend (Symbol(), OP_SELLSTOP, fixedlot, refdown, 100, refup, 0.0, "Lets Go Where Price Goes", magicnumber,0,Red);\r
102            \r
103       }\r
104    \r
105       for (i=OrdersTotal()-1; i>=0; i--)\r
106       {\r
107          OrderSelect(i, SELECT_BY_POS);\r
108          if(OrderType() == OP_BUY && OrderMagicNumber()==magicnumber && OrderSymbol()==Symbol())\r
109          {\r
110             OrderModify (OrderTicket(), OrderOpenPrice(),refdown -   pipstep*pip, 0.0, 0,LightBlue);\r
111          }\r
112          if(OrderType() == OP_SELL && OrderMagicNumber()==magicnumber && OrderSymbol()==Symbol())\r
113          {\r
114             OrderModify (OrderTicket(), OrderOpenPrice(), refup +   pipstep*pip, 0.0, 0,Tomato);\r
115          }   \r
116       }      \r
118    } \r
119    \r
120    \r
121       for (i=OrdersTotal()-1; i>=0; i--)\r
122       {\r
123          OrderSelect(i, SELECT_BY_POS);\r
124          if((count(OP_BUYSTOP) + count(OP_SELLSTOP)) == 1 && OrderOpenPrice() - Bid > pipstep*pip)\r
125             closeall();            \r
126       }     \r
127   return(0);\r
129 //+------------------------------------------------------------------+\r
131 //double ndd (double Price)\r
132 //{\r
133 //  return (NormalizeDouble(Price,Digits));\r
134 //}\r
135 //double ndi (double Value)\r
136 //{\r
137 //  return (NormalizeDouble(Value,0));\r
138 //}\r
139 //+------------------------------------------------------------------+\r
141 int count(int a)\r
143    int i=0;\r
144    int buy=0;\r
145    int sell=0;\r
146    int buystop=0;\r
147    int sellstop=0;\r
149    for(i=0;i<OrdersTotal();i++)\r
150       {\r
151        OrderSelect(i,SELECT_BY_POS,MODE_TRADES);\r
152        if(OrderMagicNumber()==magicnumber && OrderSymbol()==Symbol())\r
153        {\r
154          if(OrderType()==OP_BUY)\r
155           {\r
156             buy++;\r
157           }\r
158          if(OrderType()==OP_SELL)\r
159           {\r
160             sell++;\r
161           }\r
162          if(OrderType()==OP_BUYSTOP)\r
163           {\r
164             buystop++;\r
165           }\r
166          if(OrderType()==OP_SELLSTOP)\r
167           {\r
168             sellstop++;\r
169           }\r
170       }\r
171       }\r
172    if(a==OP_BUY){return(buy);}\r
173    if(a==OP_SELL){return(sell);}\r
174    if(a==OP_BUYSTOP){return(buystop);}\r
175    if(a==OP_SELLSTOP){return(sellstop);}\r
179 bool closeall()\r
181     for (i=OrdersTotal()-1; i>=0; i--)\r
182     {\r
183       OrderSelect(i, SELECT_BY_POS);\r
184     \r
185       if (OrderMagicNumber()==magicnumber && OrderSymbol()==Symbol())\r
186       {\r
187         if (OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP)\r
188           OrderDelete(OrderTicket());\r
189           \r
190         if (OrderType()==OP_BUY)\r
191           OrderClose(OrderTicket(),OrderLots(),Bid,100);\r
192   \r
193         if (OrderType()==OP_SELL)\r
194           OrderClose(OrderTicket(),OrderLots(),Ask,100);\r
195       }\r
196     }\r
198